# @Version        : 1.0
# @Update Time    : 2025/9/19 22:30
# @File           : constant.py.py
# @IDE            : PyCharm
# @Desc           : 文件描述信息
from dataclasses import dataclass


# 常量定义
@dataclass(frozen=True)
class TokenConsts:
    """
    Sa-Token 常量类
    """

    # ------------------ Sa-Token 版本信息

    # 当前版本号
    VERSION_NO = "v0.0.1"

    # ------------------ 常量 key 标记

    # 常量 key 标记: 如果 token 为本次请求新创建的，则以此字符串为 key 存储在当前请求中
    JUST_CREATED = "JUST_CREATED_"

    # 常量 key 标记: 如果 token 为本次请求新创建的，则以此字符串为 key 存储在当前 request 中（不拼接前缀，纯Token）
    JUST_CREATED_NOT_PREFIX = "JUST_CREATED_NOT_PREFIX_"

    # 常量 key 标记: 如果本次请求已经验证过 activeTimeout, 则以此 key 在 storage 中做一个标记
    TOKEN_ACTIVE_TIMEOUT_CHECKED_KEY = "TOKEN_ACTIVE_TIMEOUT_CHECKED_KEY_"

    # 常量 key 标记: 在登录时，默认使用的设备类型
    DEFAULT_LOGIN_DEVICE_TYPE = "DEF"

    # 常量 key 标记: 在封禁账号时，默认封禁的服务类型
    DEFAULT_DISABLE_SERVICE = "login"

    # 常量 key 标记: 在封禁账号时，默认封禁的等级
    DEFAULT_DISABLE_LEVEL = 1

    # 常量 key 标记: 在封禁账号时，可使用的最小封禁级别
    MIN_DISABLE_LEVEL = 1

    # 常量 key 标记: 账号封禁级别，表示未被封禁
    NOT_DISABLE_LEVEL = -2

    # 常量 key 标记: 在进行临时身份切换时使用的 key
    SWITCH_TO_SAVE_KEY = "SWITCH_TO_SAVE_KEY_"

    # 常量 key 标记: 在进行 Token 二级验证时，使用的 key (已废弃)
    SAFE_AUTH_SAVE_KEY = "SAFE_AUTH_SAVE_KEY_"

    # 常量 key 标记: 在进行 Token 二级认证时，写入的 value 值
    SAFE_AUTH_SAVE_VALUE = "SAFE_AUTH_SAVE_VALUE"

    # 常量 key 标记: 在进行 Token 二级验证时，默认的业务类型
    DEFAULT_SAFE_AUTH_SERVICE = "important"

    # 常量 key 标记: 临时 Token 认证模块，默认的业务类型 (已废弃)
    DEFAULT_TEMP_TOKEN_SERVICE = "record"

    # ------------------ token-style 相关

    # Token风格: uuid
    TOKEN_STYLE_UUID = "uuid"

    # Token风格: 简单uuid (不带下划线)
    TOKEN_STYLE_SIMPLE_UUID = "simple-uuid"

    # Token风格: 32位随机字符串
    TOKEN_STYLE_RANDOM_32 = "random-32"

    # Token风格: 64位随机字符串
    TOKEN_STYLE_RANDOM_64 = "random-64"

    # Token风格: 128位随机字符串
    TOKEN_STYLE_RANDOM_128 = "random-128"

    # Token风格: tik风格 (2_14_16)
    TOKEN_STYLE_TIK = "tik"

    # ------------------ SaSession 的类型

    # SaSession 的类型: Account-Session
    SESSION_TYPE_ACCOUNT = "Account-Session"

    # SaSession 的类型: Token-Session
    SESSION_TYPE_TOKEN = "Token-Session"

    # SaSession 的类型: Anon-Token-Session
    SESSION_TYPE_ANON = "Anon-Token-Session"

    # SaSession 的类型: Custom-Session
    SESSION_TYPE_CUSTOM = "Custom-Session"

    # ------------------ 其它

    # 连接 Token 前缀和 Token 值的字符
    TOKEN_CONNECTOR_CHAT = " "

    # 切面、拦截器、过滤器等各种组件的注册优先级顺序
    ASSEMBLY_ORDER = -100

    # 防火墙校验过滤器的注册顺序
    FIREWALL_CHECK_FILTER_ORDER = -102

    # 跨域处理过滤器的注册顺序
    CORS_FILTER_ORDER = -103

    # 上下文过滤器的注册顺序
    SA_TOKEN_CONTEXT_FILTER_ORDER = -104

    # RPC 框架权限过滤器的注册顺序
    RPC_PERMISSION_FILTER_ORDER = -30000

    # RPC 框架上下文过滤器的注册顺序
    RPC_CONTEXT_FILTER_ORDER = -30005

    # Content-Type key
    CONTENT_TYPE_KEY = "Content-Type"

    # Content-Type text/plain; charset=utf-8
    CONTENT_TYPE_TEXT_PLAIN = "text/plain; charset=utf-8"

    # Content-Type application/json;charset=UTF-8
    CONTENT_TYPE_APPLICATION_JSON = "application/json;charset=UTF-8"

    @classmethod
    def get_all_constants(cls):
        """
        获取所有常量（用于调试或检查）
        """
        constants = {}
        for attr_name in dir(cls):
            if not attr_name.startswith("_") and not callable(getattr(cls, attr_name)):
                constants[attr_name] = getattr(cls, attr_name)
        return constants
